package org.study.swing.study01.table;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;

/**
 * 作用描述
 * 参考 https://blog.csdn.net/zbvcyzh/article/details/139582604
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2024年11月15日
 */
public class TableDemo1 {
    public static void main(String[] args) {
        // new MyTableDemo1();
        // new MyTableDemo2();
        new MyTableDemo3();
    }

    static class MyTableDemo1 extends JFrame {
        public String[] tableHeader = {"学号", "姓名", "年龄", "学校", "专业"};
        public String[][] students = {
                {"1001", "张三", "23", "职业学院", "软件技术专业"},
                {"1002", "李四", "22", "职业学院", "软件技术专业"},
                {"1003", "王五", "21", "职业学院", "软件技术专业"},
                {"1004", "赵六", "20", "职业学院", "软件技术专业"}
        };

        public MyTableDemo1() {
            // 创建表格对象
            JTable studentTable = new JTable(students, tableHeader);
            TableColumn stucolumn = null;
            // 获取表格行数
            int counts = studentTable.getColumnCount();
            for (int i = 0; i < counts; i++) {
                stucolumn = studentTable.getColumnModel().getColumn(i);
                // 为表格列设置宽度
                stucolumn.setPreferredWidth(100);
            }
            // 关闭表格自动设定大小
            studentTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            // 为表格添加滚动条
            JScrollPane scrollPane = new JScrollPane(studentTable);
            scrollPane.setSize(400, 300);
            // 将表格对象添加到JFrame中
            super.add(scrollPane);

            // super.setSize(600, 400);
            // 将窗口居中显示在屏幕上
            super.setLocationRelativeTo(null);
            super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            super.pack();
            super.setVisible(true);
        }
    }

    static class MyTableDemo2 extends JFrame {
        public String[] tableHeader = {"学号", "姓名", "年龄", "学校", "专业"};

        public MyTableDemo2() {
            // 创建一个以给定数组为表头、行数为0的表格模型
            DefaultTableModel tableModel = new DefaultTableModel(tableHeader, 0);
            // 使用一个循环语句为表格模型添加数据
            for (int i = 10; i < 100; i++) {
                // 向模型中添加行
                tableModel.addRow(new String[]{"100" + i, "学生" + i, String.valueOf(i), "职业学院", "软件技术"});
            }
            // 以模型为参数创建表格对象
            JTable stuTable = new JTable(tableModel);
            // 禁止表格自动适应列宽
            stuTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            // 为表格添加滚动条
            JScrollPane scrollPane = new JScrollPane(stuTable);
            scrollPane.setSize(400, 300);
            // 将表格对象添加到JFrame中
            super.add(scrollPane);

            // super.setSize(600, 400);
            // 将窗口居中显示在屏幕上
            super.setLocationRelativeTo(null);
            super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            super.pack();
            super.setVisible(true);
        }
    }

    static class MyTableDemo3 extends JFrame {
        public String[] tableHeader = {"学号", "姓名", "年龄", "学校", "专业"};

        public MyTableDemo3() {
            // 创建一个以给定数组为表头、行数为0的表格模型
            DefaultTableModel tableModel = new DefaultTableModel(tableHeader, 0);
            // 使用一个循环语句为表格模型添加数据
            for (int i = 10; i < 100; i++) {
                // 向模型中添加行
                tableModel.addRow(new String[]{"100" + i, "学生" + i, String.valueOf(i), "职业学院", "软件技术"});
            }
            // 以模型为参数创建表格对象
            JTable stuTable = new JTable(tableModel);
            // 禁止表格自动适应列宽
            stuTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            // 设置表格排序器：单击列标题实现升序、降序排序
            stuTable.setRowSorter(new TableRowSorter(tableModel));
            // 设置表格的高度
            stuTable.setRowHeight(30);
            // 设置单元格的字体
            stuTable.setFont(new Font("微软雅黑", Font.PLAIN, 15));
            // 设置边框样式与颜色
            stuTable.setBorder(BorderFactory.createLineBorder(Color.GREEN));
            // 设置表格单行选择模式
            // stuTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            // 设置表格多行选择模式：ctrl+鼠标多选
            stuTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            // 为表格添加滚动条
            JScrollPane scrollPane = new JScrollPane(stuTable);
            scrollPane.setSize(400, 300);
            // 将表格对象添加到JFrame中
            super.add(scrollPane);

            // super.setSize(600, 400);
            // 将窗口居中显示在屏幕上
            super.setLocationRelativeTo(null);
            super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            super.pack();
            super.setVisible(true);
        }
    }
}
